package com.itheima.leetcode.od.c.stack;

import java.util.Arrays;
import java.util.Scanner;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.stream.Collectors;

/**
 * <h3>找朋友</h3>
 */
public class FindFriend {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();

        // 输入所有身高
        int[] heights = new int[N];
        for (int i = 0; i < N; i++) {
            heights[i] = scanner.nextInt();
        }

        // 单调栈解法

        // 使用 N 个 0 初始化朋友位置
        int[] friend_pos_faster = new int[N];

        Deque<Integer> single_stack = new ArrayDeque<>();

        // 从左到右遍历身高数组
        for (int i = 0; i < heights.length; i++) {
            // 当栈不为空，且当前身高 heights[i] 大于栈顶索引对应的身高时
            while (!single_stack.isEmpty() && heights[single_stack.peek()] < heights[i]) {
                // 说明当前元素 i 是栈顶元素的“右边第一个更高的人”
                int topIndex = single_stack.pop(); // 弹出栈顶索引
                friend_pos_faster[topIndex] = i;  // 记录结果 按弹出元素的视角
            }
            // 将当前索引压入栈中，维持栈的单调递减性（按身高）
            single_stack.push(i);
        }

        // 输出结果
        System.out.println(Arrays.stream(friend_pos_faster)
                .boxed()
                .map(String::valueOf)
                .collect(Collectors.joining(" ")));
    }
}